import logging
import os

loggers = {}  # 用于存储已创建的日志对象


def setup_logger(name: str = None):
    """
    配置一个日志对象。
    :param name: 日志记录器的名称（通常使用模块名）
    :return: 配置好的日志对象
    """
    global loggers
    if name in loggers:
        return loggers[name]

    """
    配置一个日志对象。
    :param name: 日志记录器的名称（通常使用模块名）
    :return: 配置好的日志对象
    """
    # 定义日志格式
    log_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'

    # 日志输出路径（当前目录下的 logs 文件夹）
    log_dir = "logs"
    os.makedirs(log_dir, exist_ok=True)  # 如果目录不存在，创建它
    log_file = os.path.join(log_dir, "app.log")

    # 创建日志记录器
    logger = logging.getLogger(name if name else __name__)
    logger.setLevel(logging.DEBUG)  # 设置日志级别

    # 避免重复添加处理器
    if not logger.handlers:
        # 控制台处理器
        console_handler = logging.StreamHandler()
        console_handler.setLevel(logging.DEBUG)
        console_handler.setFormatter(logging.Formatter(log_format))

        # 文件处理器
        file_handler = logging.FileHandler(log_file, encoding='utf-8')
        file_handler.setLevel(logging.DEBUG)
        file_handler.setFormatter(logging.Formatter(log_format))

        # 添加处理器到日志对象
        logger.addHandler(console_handler)
        logger.addHandler(file_handler)

    loggers[name] = logger

    return logger
